package com.dsbj.mp.icardservice.service.msgcenter;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsbj.common.msg.ResponseMessage;
import com.dsbj.mp.icardservice.entity.msgcenter.McMessage;
import com.dsbj.mp.icardservice.mapper.msgcenter.McMessageMapper;
import com.dsbj.mp.icardservice.utils.Constants;
import io.netty.util.Constant;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 消息中心》消息信息服务类。
 * @author cjw 2020-02-21
 */
@Service
@Transactional
public class McMessageService extends ServiceImpl<McMessageMapper, McMessage> {

	@Resource
	private McMessageMapper mcMessageMapper;
	
	
	
	
	/**
	 * 根据mcCateId获取该类别下的最新消息。
	 * @param
	 * @return
	 * @author cjw 2020-02-21
	 */
	public McMessage getLatestMcMessageByMcCateId(String mcCateId,String idcardno){
		QueryWrapper<McMessage> queryWrapper=new QueryWrapper<McMessage>()
				.eq("IDCARDNO",idcardno)
				.eq("MCCATEID",mcCateId)
				.orderByDesc("	CREATE_TIME");
		List<McMessage> list_mcMessage=mcMessageMapper.selectList(queryWrapper);
		//
		if(list_mcMessage.isEmpty()){
			return null;
		}
		return list_mcMessage.get(0);
	}
	
	/**
	 * 根据mcCateId,status,idcardno获取mcMessage列表,并根据createTime倒序排序。
	 * @param
	 * @return 
	 * @author cjw 2020-02-21
	 */
	public List<McMessage> getMcMessageByMcCateIdByStatus(String mcCateId, int status, String idcardno){
		QueryWrapper<McMessage> queryWrapper=new QueryWrapper<McMessage>()
				.eq("IDCARDNO",idcardno)
				.eq("MCCATEID",mcCateId)
				.eq("STATUS",status)
				.orderByDesc("CREATE_TIME");
		List<McMessage> list_mcMessage=mcMessageMapper.selectList(queryWrapper);
		return list_mcMessage;
	}
	
	/**
	 * 根据mcCateId获取该类别下的消息列表。
	 * @param
	 * @return
	 * @author cjw 2020-02-21
	 */
	public List<McMessage> getMcMessageByMcCateId(String mcCateId, String idcardno){
		QueryWrapper<McMessage> queryWrapper=new QueryWrapper<McMessage>()
				.eq("IDCARDNO",idcardno)
				.eq("MCCATEID",mcCateId)
				.orderByDesc("CREATE_TIME");
		List<McMessage> list_mcMessage=mcMessageMapper.selectList(queryWrapper);
		return list_mcMessage;
	}
	
	/**
	 * 根据mcCateId分页获取该类别下的消息列表。
	 * @param 
	 * @return 
	 * @author cjw 2020-02-21
	 */
	public Page<McMessage> getMcMessageByMcCateIdByPage(String mcCateId, String idcardno,int pageNum,int pageSize){
		Page<McMessage> page=new Page<McMessage>().setCurrent(pageNum).setSize(pageSize);
		QueryWrapper<McMessage> queryWrapper=new QueryWrapper<McMessage>()
				.eq("IDCARDNO",idcardno)
				.eq("MCCATEID",mcCateId)
				.orderByDesc("CREATE_TIME");
		mcMessageMapper.selectPage(page,queryWrapper);
		return page;
	}
	
	/**
	 * 获取未读消息(返回的mcMessage中信息不完整)。
	 * @param 
	 * @return 
	 * @author cjw 2020-02-24
	 */
	public List<McMessage> getMcMessageNotRead(String idcardno){
		QueryWrapper<McMessage> queryWrapper=new QueryWrapper<McMessage>()
				.select("ID")
				.eq("IDCARDNO",idcardno)
				.eq("STATUS",1)
				.orderByDesc("CREATE_TIME");
		List<McMessage> list_mcMessage=mcMessageMapper.selectList(queryWrapper);
		return list_mcMessage;
	}
	
	/**
	 * 将mcMessage的状态置为"已读"。
	 * @param
	 * @return
	 * @author cjw 2020-02-24
	 */
	public ResponseMessage updateMcMessageStatus_read(String mcMessageId){
		QueryWrapper<McMessage> queryWrapper=new QueryWrapper<McMessage>()
				.eq("ID",mcMessageId);
		McMessage mcMessage= mcMessageMapper.selectOne(queryWrapper);
		if(mcMessage==null){
			return ResponseMessage.error("未找到对应的消息!");
		}
		//若消息状态为"未读",将其置为"已读"
		if(mcMessage.getStatus()!=null && mcMessage.getStatus()==1){
			mcMessage.setStatus(2);
			mcMessage.setUpdateTime(new Date());
			mcMessageMapper.updateById(mcMessage);
		}
		return ResponseMessage.ok();
	}
	
	/**
	 * 删除mcMessageId对应的消息。
	 * @param 
	 * @return 
	 * @author cjw 2020-02-24
	 */
	public ResponseMessage delMcMessageById(String mcMessageId){
		McMessage mcMessage=mcMessageMapper.selectById(mcMessageId);
		if(mcMessage==null){
			return ResponseMessage.error("未找到对应的消息!");
		}
		
		mcMessageMapper.deleteById(mcMessageId);
		return ResponseMessage.ok();
	}
	
	/**
	 * 向list_idcardno中的员工发送"健康打卡通知"。
	 * @param
	 * @return 
	 * @author cjw 2020-02-25
	 */
	public String sendPhysicalConditionFillInRemindByIdcardno(List<String> list_idcardno){
		if(list_idcardno==null){
			return Constants.SUCCESS;
		}
		List<McMessage> list_mcMessage=new ArrayList<>();
		McMessage mcMessage=null;
		
		for(String idcardno: list_idcardno){
			mcMessage=new McMessage();
			mcMessage.setTitle("健康打卡");
			mcMessage.setDes("您今天还没有健康打卡,记得每天健康打卡哦~");
			mcMessage.setMccateid("3");
			mcMessage.setIdcardno(idcardno);
			mcMessage.setStatus(1);
			mcMessage.setCreateTime(new Date());
			mcMessage.setCreateUser("admin");
			mcMessage.setJumpType(1);
			//
			list_mcMessage.add(mcMessage);
		}
		//存入list_mcMessage
		this.saveBatch(list_mcMessage);
		return Constants.SUCCESS;
	}
	
	/**
	 * 根据mcCateId,删除该类别下的已读消息。
	 * @param
	 * @return
	 * @author cjw 2020-03-06
	 */
	public String delMcMessageReadByMcCateId(String mcCateId,String idcardno){
		UpdateWrapper<McMessage> updateWrapper=new UpdateWrapper<McMessage>()
				.eq("IDCARDNO",idcardno)
				.eq("MCCATEID",mcCateId)
				.eq("STATUS",2);
		mcMessageMapper.delete(updateWrapper);
		return Constants.SUCCESS;
	}
	
	/**
	 * 根据mcCateId,删除该类别下的所有消息。
	 * @param
	 * @return
	 * @author cjw 2020-03-06
	 */
	public String delMcMessageByMcCateId(String mcCateId,String idcardno){
		UpdateWrapper<McMessage> updateWrapper=new UpdateWrapper<McMessage>()
				.eq("IDCARDNO",idcardno)
				.eq("MCCATEID",mcCateId);
		mcMessageMapper.delete(updateWrapper);
		return Constants.SUCCESS;
	}
	
	
}
